"""
Data models for the data preprocessing pipeline.

This module contains dataclass definitions for configuration, results, and progress tracking
used throughout the preprocessing pipeline system.
"""

from dataclasses import dataclass
from typing import List, Optional


@dataclass
class ProcessingConfiguration:
    """
    Configuration settings for a preprocessing pipeline execution.
    
    Attributes:
        input_file (str): Path to the input Excel file
        layer_count (int): Number of preprocessing layers
        layer_selections (List[List[int]]): Selected preprocessing method IDs for each layer
        output_directory (str): Directory path for output files
    """
    input_file: str
    layer_count: int
    layer_selections: List[List[int]]
    output_directory: str


@dataclass
class ProcessingResult:
    """
    Result information for a single preprocessing combination execution.
    
    Attributes:
        combination_id (str): Unique identifier for the preprocessing combination
        combination (List[int]): List of preprocessing method IDs in the combination
        success (bool): Whether the processing was successful
        output_file (Optional[str]): Path to the generated output file if successful
        error_message (Optional[str]): Error message if processing failed
        processing_time (float): Time taken to process this combination in seconds
    """
    combination_id: str
    combination: List[int]
    success: bool
    output_file: Optional[str]
    error_message: Optional[str]
    processing_time: float


@dataclass
class ProgressInfo:
    """
    Progress tracking information for batch processing operations.
    
    Attributes:
        current_combination (int): Index of the currently processing combination
        total_combinations (int): Total number of combinations to process
        percentage (float): Completion percentage (0.0 to 100.0)
        estimated_time_remaining (float): Estimated time remaining in seconds
        current_combination_id (str): ID of the currently processing combination
    """
    current_combination: int
    total_combinations: int
    percentage: float
    estimated_time_remaining: float
    current_combination_id: str